C++基础(命名空间,输入输出流,缺省参数,函数重载) | 您所在的位置:网站首页 › c++ 输出头文件 › C++基础(命名空间,输入输出流,缺省参数,函数重载) |
@[TOC] 前言C++是在C语言的基础上提出的,本节将区分C与C++的一些相似且易错的知识点,进行过渡的同时,为接下来的C++学习奠定基础。 C++关键字C++是在C语言基础之上产生的,所以C++的关键字包含了很多C语言的关键字,这也说明C++是兼容C语言的。 C++的关键字有63个: asm,do,if,return,try,continue,auto,double,inline,short,tepedef,for,bool,dynamic_cast,int,signed,typeid,for,public,break,else,long,sizeof,typename,throw,case,enum,mutable,static,union,wchar_t,catch,explicit,namespace,static_cast,unsigned,default,char,export,new,struct,using,friend,class,extern,operator,switch,virtual,register,const,false,private,template,void,true,const_cast,float,protected,this,volatile,while,delete,goto,reinterpret_cast 命名空间 作用C++的引入是在C语言的基础上的,所以引入的东西也都是C语言所缺陷的,在C语言中没有命名空间这一说法,使得我们无法使用C语言提供的函数名作为参数名,举一个栗子: #include #include int main() { int printf = 10; printf("%d", printf); }这一段程序是不正确的程序,由于printf是已经在stdio.h中定义过的函数名,不能再使用它作为变量名了。 在一个公司中,一个工程往往都是好多人一起来完成的,这就可能出现,两个人定义了相同名称的变量,但是他们都不知道造成一定的麻烦,因此C++引入命名空间这一概念,来使得可以定义相同名称的变量而不会产生冲突 命名空间的使用命名空间是定义在全局中的,因此其中的变量都是存在内存中的静态区 使用命名空间就要使用关键字:namespace,下面就是命名空间的书写。 namespace llb { int printf = 10; int Add(int left, int right) { return left + right; } struct Node { struct Node* next; int val; }; }这样就定义了一个名叫llb的命名空间,它里面的内容可以是变量,函数也可以是结构体。 那么如何使用其中的变量呢,这就需要域作用限定符‘::’ 只需要将代码改为: printf("%d", llb::printf);llb:printf表示的就是引用的printf是llb中的printf而不是全局或者主函数中的printf。打印的结果是: 命名空间的原理与编译器的查找规则有关。对于这样一段代码: printf("%d", a);编译器在打印a这个变量的时候,首先会在主函数中去寻找a这个变量的值,如果没有找到就会在全局中(静态区)寻找,再没找到就会报错。这也说明了在全局中与主函数中定义的相同名字的变量,在使用的时候会首先使用主函数中定义的。 而命名空间既不在主函数中也不再全局中,必须进过::操作符的引用才能打印。 当加入lib::时,编译器就只会从该命名空间来查找这一变量了。 命名空间的展开命名空间的展开指的就是将命名空间中的变量展开到全局中。 部分展开使用using 可以进行空间的部分展开,举一个例子: namespace llb { int a = 20; int b = 30; } using llb::a; int main() { printf("%d", a); }在全局中加入using llb::a,即可在函数中不引用a来使用a,即a已经进入到了全局中,但是不能使用b,因为b没有进入全局中。 全部展开使用using namespace可以进行命名空间的全部展开,但是需要慎用,因为全部展开之后命名空间将不再有意义。 namespace llb { int a = 20; int b = 30; } using namespace llb; int main() { printf("%d", a); printf("%d", b); }
|
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |